home *** CD-ROM | disk | FTP | other *** search
/ MacWorld 1999 July / Macworld (1999-07).dmg / Serious Software / OpenWorld demo 2.0 / Development / DoubleTag / Applescript / APPLESCRIPT.c next >
Text File  |  1999-04-21  |  2KB  |  73 lines

  1. /*  File: Applescript.c      
  2.     Copyright (c) 1999 Marco Bambini. All rights reserved.
  3.  
  4.     Description: execute with Applescript the text between the <APPLESCRIPT> </APPLESCRIPT> tags
  5. */
  6.  
  7. #include "OpenWorld_plugIn.h"
  8. #include <CodeFragments.h>
  9. #include <OSA.h>
  10.  
  11. Boolean main (dataPtr param)
  12. {    
  13.     switch (param->message)
  14.     {
  15.         case init_message:
  16.             {
  17.                 param->version=kVersion;
  18.                 param->customData=kUnused;
  19.             }
  20.             break;
  21.         
  22.         case run_message:
  23.             {
  24.                 AEDesc        sourceData,resultingData;
  25.                 OSAError    myOSAErr;
  26.                 long        flags;
  27.                 
  28.                 if (param->scriptingComponent==NULL) return NULL;
  29.                 if (param->dim==0) return NULL;
  30.                 if (param->inputText==NULL) return NULL;
  31.                 
  32.                 /* Prepare the descriptor parameter */
  33.                 myOSAErr=AECreateDesc(typeChar,param->inputText,param->dim,&sourceData);
  34.                 
  35.                 if (myOSAErr==noErr) flags=kOSAModeNeverInteract + kOSAModeCantSwitchLayer + kOSAModeDisplayForHumans ;
  36.                 else return NULL;
  37.                 
  38.                 /* Compile, execute and convert the result*/
  39.                 myOSAErr=OSADoScript(param->scriptingComponent,&sourceData,kOSANullScript,typeChar,flags,&resultingData);
  40.                 if (myOSAErr==errOSAScriptError) myOSAErr=OSAScriptError(param->scriptingComponent,kOSAErrorMessage,typeChar,&resultingData);
  41.                 
  42.                 /* Allocate a return buffer */
  43.                 if (myOSAErr==noErr) param->dim=GetHandleSize(resultingData.dataHandle);
  44.                 else {param->dim=0;param->outputText=NULL;}
  45.                 
  46.                 if (param->dim==0) param->outputText=NULL;
  47.                     else param->outputText=OW_NewPtr(param,param->dim);
  48.                     
  49.                 if (param->outputText!=NULL) BlockMove(*(resultingData.dataHandle),param->outputText,param->dim);
  50.                     else {param->dim=0;param->outputText=NULL;}
  51.             
  52.                 /* Dispose unused buffers */
  53.                 AEDisposeDesc(&sourceData);
  54.                 AEDisposeDesc(&resultingData);
  55.             }
  56.             break;
  57.         
  58.         case stop_message:
  59.             {    
  60.                 // dispose the buffer
  61.                 OW_DisposePtr(param,param->outputText);
  62.             }
  63.             break;
  64.             
  65.         case end_message:
  66.             {
  67.                 // do nothing
  68.             }
  69.             break;
  70.     }
  71.     // Ask OpenWorld to send the text between <APPLESCRIPT> and </APPLESCRIPT> in the run_message
  72.     return kDoubleTag;
  73. }